home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / isc / sockaddr.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-09-17  |  6.3 KB  |  241 lines

  1. /*
  2.  * Copyright (C) 2004-2006  Internet Systems Consortium, Inc. ("ISC")
  3.  * Copyright (C) 1998-2003  Internet Software Consortium.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software for any
  6.  * purpose with or without fee is hereby granted, provided that the above
  7.  * copyright notice and this permission notice appear in all copies.
  8.  *
  9.  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  10.  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  11.  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  12.  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  13.  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  14.  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15.  * PERFORMANCE OF THIS SOFTWARE.
  16.  */
  17.  
  18. /* $Id: sockaddr.h,v 1.42.18.8 2006/03/02 00:37:22 marka Exp $ */
  19.  
  20. #ifndef ISC_SOCKADDR_H
  21. #define ISC_SOCKADDR_H 1
  22.  
  23. /*! \file */
  24.  
  25. #include <isc/lang.h>
  26. #include <isc/net.h>
  27. #include <isc/types.h>
  28. #ifdef ISC_PLATFORM_HAVESYSUNH
  29. #include <sys/un.h>
  30. #endif
  31.  
  32. struct isc_sockaddr {
  33.     union {
  34.         struct sockaddr        sa;
  35.         struct sockaddr_in    sin;
  36.         struct sockaddr_in6    sin6;
  37. #ifdef ISC_PLATFORM_HAVESYSUNH
  38.         struct sockaddr_un    sunix;
  39. #endif
  40.     }                type;
  41.     unsigned int            length;        /* XXXRTH beginning? */
  42.     ISC_LINK(struct isc_sockaddr)    link;
  43. };
  44.  
  45. typedef ISC_LIST(struct isc_sockaddr)    isc_sockaddrlist_t;
  46.  
  47. #define ISC_SOCKADDR_CMPADDR      0x0001    /*%< compare the address
  48.                          *   sin_addr/sin6_addr */
  49. #define ISC_SOCKADDR_CMPPORT       0x0002    /*%< compare the port
  50.                          *   sin_port/sin6_port */
  51. #define ISC_SOCKADDR_CMPSCOPE     0x0004    /*%< compare the scope
  52.                          *   sin6_scope */
  53. #define ISC_SOCKADDR_CMPSCOPEZERO 0x0008    /*%< when comparing scopes
  54.                          *   zero scopes always match */
  55.  
  56. ISC_LANG_BEGINDECLS
  57.  
  58. isc_boolean_t
  59. isc_sockaddr_compare(const isc_sockaddr_t *a, const isc_sockaddr_t *b,
  60.              unsigned int flags);
  61. /*%<
  62.  * Compare the elements of the two address ('a' and 'b') as specified
  63.  * by 'flags' and report if they are equal or not.
  64.  *
  65.  * 'flags' is set from ISC_SOCKADDR_CMP*.
  66.  */
  67.  
  68. isc_boolean_t
  69. isc_sockaddr_equal(const isc_sockaddr_t *a, const isc_sockaddr_t *b);
  70. /*%<
  71.  * Return ISC_TRUE iff the socket addresses 'a' and 'b' are equal.
  72.  */
  73.  
  74. isc_boolean_t
  75. isc_sockaddr_eqaddr(const isc_sockaddr_t *a, const isc_sockaddr_t *b);
  76. /*%<
  77.  * Return ISC_TRUE iff the address parts of the socket addresses
  78.  * 'a' and 'b' are equal, ignoring the ports.
  79.  */
  80.  
  81. isc_boolean_t
  82. isc_sockaddr_eqaddrprefix(const isc_sockaddr_t *a, const isc_sockaddr_t *b,
  83.               unsigned int prefixlen);
  84. /*%<
  85.  * Return ISC_TRUE iff the most significant 'prefixlen' bits of the
  86.  * socket addresses 'a' and 'b' are equal, ignoring the ports.
  87.  */
  88.  
  89. unsigned int
  90. isc_sockaddr_hash(const isc_sockaddr_t *sockaddr, isc_boolean_t address_only);
  91. /*%<
  92.  * Return a hash value for the socket address 'sockaddr'.  If 'address_only'
  93.  * is ISC_TRUE, the hash value will not depend on the port.
  94.  *
  95.  * IPv6 addresses containing mapped IPv4 addresses generate the same hash
  96.  * value as the equivalent IPv4 address.
  97.  */
  98.  
  99. void
  100. isc_sockaddr_any(isc_sockaddr_t *sockaddr);
  101. /*%<
  102.  * Return the IPv4 wildcard address.
  103.  */
  104.  
  105. void
  106. isc_sockaddr_any6(isc_sockaddr_t *sockaddr);
  107. /*%<
  108.  * Return the IPv6 wildcard address.
  109.  */
  110.  
  111. void
  112. isc_sockaddr_anyofpf(isc_sockaddr_t *sockaddr, int family);
  113. /*%<
  114.  * Set '*sockaddr' to the wildcard address of protocol family
  115.  * 'family'.
  116.  *
  117.  * Requires:
  118.  * \li    'family' is AF_INET or AF_INET6.
  119.  */
  120.  
  121. void
  122. isc_sockaddr_fromin(isc_sockaddr_t *sockaddr, const struct in_addr *ina,
  123.             in_port_t port);
  124. /*%<
  125.  * Construct an isc_sockaddr_t from an IPv4 address and port.
  126.  */
  127.  
  128. void
  129. isc_sockaddr_fromin6(isc_sockaddr_t *sockaddr, const struct in6_addr *ina6,
  130.              in_port_t port);
  131. /*%<
  132.  * Construct an isc_sockaddr_t from an IPv6 address and port.
  133.  */
  134.  
  135. void
  136. isc_sockaddr_v6fromin(isc_sockaddr_t *sockaddr, const struct in_addr *ina,
  137.               in_port_t port);
  138. /*%<
  139.  * Construct an IPv6 isc_sockaddr_t representing a mapped IPv4 address.
  140.  */
  141.  
  142. void
  143. isc_sockaddr_fromnetaddr(isc_sockaddr_t *sockaddr, const isc_netaddr_t *na,
  144.              in_port_t port);
  145. /*%<
  146.  * Construct an isc_sockaddr_t from an isc_netaddr_t and port.
  147.  */
  148.  
  149. int
  150. isc_sockaddr_pf(const isc_sockaddr_t *sockaddr);
  151. /*%<
  152.  * Get the protocol family of 'sockaddr'.
  153.  *
  154.  * Requires:
  155.  *
  156.  *\li    'sockaddr' is a valid sockaddr with an address family of AF_INET
  157.  *    or AF_INET6.
  158.  *
  159.  * Returns:
  160.  *
  161.  *\li    The protocol family of 'sockaddr', e.g. PF_INET or PF_INET6.
  162.  */
  163.  
  164. void
  165. isc_sockaddr_setport(isc_sockaddr_t *sockaddr, in_port_t port);
  166. /*%<
  167.  * Set the port of 'sockaddr' to 'port'.
  168.  */
  169.  
  170. in_port_t
  171. isc_sockaddr_getport(const isc_sockaddr_t *sockaddr);
  172. /*%<
  173.  * Get the port stored in 'sockaddr'.
  174.  */
  175.  
  176. isc_result_t
  177. isc_sockaddr_totext(const isc_sockaddr_t *sockaddr, isc_buffer_t *target);
  178. /*%<
  179.  * Append a text representation of 'sockaddr' to the buffer 'target'.
  180.  * The text will include both the IP address (v4 or v6) and the port.
  181.  * The text is null terminated, but the terminating null is not
  182.  * part of the buffer's used region.
  183.  *
  184.  * Returns:
  185.  * \li    ISC_R_SUCCESS
  186.  * \li    ISC_R_NOSPACE    The text or the null termination did not fit.
  187.  */
  188.  
  189. void
  190. isc_sockaddr_format(const isc_sockaddr_t *sa, char *array, unsigned int size);
  191. /*%<
  192.  * Format a human-readable representation of the socket address '*sa'
  193.  * into the character array 'array', which is of size 'size'.
  194.  * The resulting string is guaranteed to be null-terminated.
  195.  */
  196.  
  197. isc_boolean_t
  198. isc_sockaddr_ismulticast(const isc_sockaddr_t *sa);
  199. /*%<
  200.  * Returns #ISC_TRUE if the address is a multicast address.
  201.  */
  202.  
  203. isc_boolean_t
  204. isc_sockaddr_isexperimental(const isc_sockaddr_t *sa);
  205. /*
  206.  * Returns ISC_TRUE if the address is a experimental (CLASS E) address.
  207.  */
  208.  
  209. isc_boolean_t
  210. isc_sockaddr_islinklocal(const isc_sockaddr_t *sa);
  211. /*%<
  212.  * Returns ISC_TRUE if the address is a link local addresss.
  213.  */
  214.  
  215. isc_boolean_t
  216. isc_sockaddr_issitelocal(const isc_sockaddr_t *sa);
  217. /*%<
  218.  * Returns ISC_TRUE if the address is a sitelocal address.
  219.  */
  220.  
  221. isc_result_t
  222. isc_sockaddr_frompath(isc_sockaddr_t *sockaddr, const char *path);
  223. /*
  224.  *  Create a UNIX domain sockaddr that refers to path.
  225.  *
  226.  * Returns:
  227.  * \li    ISC_R_NOSPACE
  228.  * \li    ISC_R_NOTIMPLEMENTED
  229.  * \li    ISC_R_SUCCESS
  230.  */
  231.  
  232. #define ISC_SOCKADDR_FORMATSIZE \
  233.     sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:XXX.XXX.XXX.XXX%SSSSSSSSSS#YYYYY")
  234. /*%<
  235.  * Minimum size of array to pass to isc_sockaddr_format().
  236.  */
  237.  
  238. ISC_LANG_ENDDECLS
  239.  
  240. #endif /* ISC_SOCKADDR_H */
  241.